MINNEAPOLIS -- A performance like Bartolo Colon's hadn't occurred in more than 25 years.
Colon threw his first complete game in almost two years to earn his first win with Minnesota, Brian Dozier homered twice and the Twins beat the Rangers 8-4 on Friday night.
At 44 years and 72 days, Colon is the oldest American League player to win a complete game since Nolan Ryan (45 years and 155 days) on July 4, 1992.
"At my age, being able to throw nine innings is impressive," Colon said through an interpreter. He threw 106 pitches, 78 strikes.
Colon, who signed with Minnesota on July 7, has won games with 10 teams, trailing the major league record of 11 set by LaTroy Hawkins, Mike Morgan and Ron Villone.
Colon tied a different type of record, matching Jamie Moyer's MLB mark for the most ballparks in which he has allowed a home run. He has allowed a home run in 43 overall, including all 30 current ballparks.
Twins' Sano day-to-day with hand contusion
Minnesota Twins third baseman Miguel Sana left the game in the sixth inning after being hit by a pitch. Team announced X-rays came back negative and he's day-to-day.
In his fourth start for Minnesota, Colon (3-9) scattered nine hits and allowed four earned runs for his 37th career complete game and first since Sept. 5, 2015, with the New York Mets. He struck out five and walked one for his first win in nine starts since May 15 with Atlanta.
Only three times did Colon have to face five hitters in an inning, including the first, when a complete game seemed unrealistic.
Shin-Soo Choo singled on Colon's first pitch, and Elvis Andrus hit the first of his three doubles on the second. Adrian Beltre hit a two-run single two batters later.
"After that first inning when Andrus got the double and the first guy got on base, I knew that I had to start throwing a lot of breaking balls, and that's what I did," Colon said.
"When he's filling up the zone pitch after pitch and just relying on defense, nibbling on the outer half and inner half, and then every now and then flipping the slider and changeup in, you can't write it any better," Dozier said.
PEREZ STILL STRUGGLING
Texas starter Martin Perez (5-10) allowed seven earned runs in 4 2/3 innings, dropping to 0-4 with a 9.41 ERA in his past four starts.
"They don't swing at bad pitches so I think I was doing something wrong with my delivery tonight," he said.
Since coming off the disabled list July 3, Perez has a 7.27 ERA and one win in six starts.
He allowed five earned runs before Texas recorded four outs, but settled in to retire nine straight batters before Joe Mauer was hit by a pitch in the fifth.
Needing 40 pitches to get through the opening inning, Perez allowed five hits, including home runs by Dozier and Robbie Grossman, and walked two. A double play with the bases loaded ended the inning.
"Fastballs were mid-across, changeups were a ball out of the hand and there was no real depth to the breaking ball. It felt like after the second home run, he got settled in and found a way to make some pitches," Texas manager Jeff Banister said.
This was the seventh career multihomer game for Dozier and second of the season. He also did it May 2 against Oakland. His leadoff home run in the first inning was his fifth this year and 24th of his career.
Dozier, who also homered to start the second inning for a 5-2 lead, finished with three hits after going 5-for-37 in his previous eight games.
Rangers: RHP Tyson Ross, on the 10-day disabled list since July 24 with a blister on his right index finger, is scheduled to make his second rehab start Saturday with Double-A Frisco.
Twins: 3B Miguel Sano left the game in the sixth inning with a left hand contusion after being hit by a pitch. X-rays were negative, and the team's home run leader with 25 is day-to-day. ... LHP Hector Santiago was in the clubhouse after throwing 92 pitches in his third rehab start for Triple-A Rochester on Thursday. He has been on the disabled list since July 3 with an upper back strain. Manager Paul Molitor said Santiago's next step is uncertain.
Rangers: LHP Cole Hamels (5-1. 4.01) has allowed 14 earned runs in 17 1/3 innings over his past three starts but allowed just three in six innings Monday against Seattle. He also struck out a season-high seven.
Twins: RHP Kyle Gibson (6-8, 6.08) returns from Triple-A Rochester to start Saturday. Sent down July 25, he allowed one hit in five shutout innings in his lone start with the Red Wings July 27. OF Zack Granite was sent down to make room for Gibson.
The Associated Press and ESPN Stats & Information contributed to this report.